package Exer5;


import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.border.BevelBorder;

/*
 *  现有一个Triangle（三角形）类
 *  服务器用于接收客户端传来的Triangle对象，计算三角形面积，将计算结果传给客户端。
 *  基本要求：使用Socket类和ServerSocket类实现单线程对象的发送与接收。
 *  实现计算结果的发送与接收。可以不使用界面。
 *  选做内容：
	实现多线程服务器和多线程客户端：
	服务器可以同时连接若干客户端；
	每个客户端接收字符串和发送Triangle对象是两个独立的线程。
 */

/**
 * 客户端的图形界面
 * @date 2019年11月20日 17:43:51
 */

public class TriangleFrame extends JFrame{
	// 界面布局
	Client client = new Client();
	
	JPanel north, center, south;
	
	JButton link, send;
	
	JTextField textA, textB, textC;
	
	JTextArea area;
	
	public TriangleFrame() {
		link = new JButton("连接到服务器");
		send = new JButton("Send");
		
		textA = new JTextField();
		textB = new JTextField();
		textC = new JTextField();
		
		area = new JTextArea();
		
		north = new JPanel();
		south = new JPanel();
		center = new JPanel();
		
		init();
		
		north.setLayout(new BorderLayout());
		north.add(link, BorderLayout.CENTER);
		
		center.setLayout(new FlowLayout());
		center.add(new JLabel("sideA"));
		center.add(textA);
		center.add(new JLabel("sideB"));
		center.add(textB);
		center.add(new JLabel("sideC"));
		center.add(textC);
		center.add(send);
		
		south.setLayout(new BorderLayout());
		south.add(area);
		area.setBorder(new BevelBorder(BevelBorder.LOWERED));
		
		this.setTitle("客户端");
		this.setVisible(true);
		this.setSize(600, 400);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		this.add(north, BorderLayout.NORTH);
		this.add(center, BorderLayout.CENTER);
		this.add(south, BorderLayout.SOUTH);
	}
	
	void init() {
		/**
		 * 界面初始化，并完成监听
		 * @date 2019年11月20日 17:45:44
		 */
		area.setRows(16);
		textA.setPreferredSize(new Dimension(100, 30));
		textB.setPreferredSize(new Dimension(100, 30));
		textC.setPreferredSize(new Dimension(100, 30));
		
		// 连接按钮的监听
		link.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				if(client.isLink()) {
					area.setText("服务器连接成功！IP地址为：" 
								+ client.mySocket.getInetAddress() + "\n");
					area.append("端口地址为：" + client.mySocket.getLocalPort() + "\n");
				}
				else {
					area.setText("服务器连接失败\n");
				}
				
			}
		});
		
		// 发送按钮的监听
		send.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				String a, b, c;
				a = textA.getText();
				b = textB.getText();
				c = textC.getText();
				
				Double Sarea = client.Interact(a, b, c);
				if(Sarea == -1) {
					area.append("输入的三个边长不能组成三角形\n");
				}
				else {
					area.append("三角形的面积为：" + Sarea + "\n");
				}
			}
		});
	}
	
	public static void main(String args[]) {
		new TriangleFrame();
	}
}